export class Ddapi {

  //钉钉签名设置
  config(cfg) {
    dd.config(cfg);
  }
  //钉钉容器设置
  ready() {
    return new Promise(function (resolve) {
      dd.ready(function () {
        resolve();
      });
    })
  }
  locationApi() {
    return new Promise(function (resolve) {
      dd.device.geolocation.get({
        targetAccuracy: 200,
        coordinate: 0,
        withReGeocode: Boolean,
        onSuccess: function (result) {

          resolve(result)

        },
        onFail: function (err) {
          // t.$ddapi.alert("您的设备获取地理位置失败！");
          alert(JSON.stringify(err))
        }
      });
    });
  }
  //钉钉图片显示
  previewImage(urls, thisUrl) {
    dd.biz.util.previewImage({
      urls: urls, //图片地址列表
      current: thisUrl, //当前显示的图片链接
      onSuccess: function (result) {
        /**/
      },
      onFail: function (err) {}
    })
  }

  chosen(soucejson) {
    // alert(1)
    return new Promise(function (resolve) {
      dd.biz.util.chosen({
        source: soucejson,
        selectedKey: '选项2', // 默认选中的key
        onSuccess: function (result) {
          //onSuccess将在点击完成之后回调
          /*
          {
              key: '选项2',
              value: '234'
          }
          */
        },
        onFail: function (err) {
          alert(JSON.stringify(err))
        }
      })
    })

  }
  //钉钉扫码功能
  utilscan() {
    return new Promise(function (resolve) {
      dd.biz.util.scan({
        type: 'all',
        onSuccess: function (data) {
          resolve(data);
          // alert(JSON.stringify(data))
        },
        onFail: function (err) {
          alert(JSON.stringify(err))
        }
      })
    })
  }
  //只能拍照上传
  uploadImageFromCamera() {
    return new Promise(function (resolve, reject) {
      dd.biz.util.uploadImageFromCamera({
        compression: true, //(是否压缩，默认为true)
        onSuccess: function (result) {
          // alert(result)
          resolve(result)
          //onSuccess将在图片上传成功之后调用
          /*
          [
            'http://gtms03.alicdn.com/tps/i3/TB1VF6uGFXXXXalaXXXmh5R_VXX-237-236.png'
          ]
          */
        },
        onFail: function (err) {}
      });
    });
  }
  //免登CODE获取
  requestAuthCode(corpId) {
    // runtime.permission.requestOperateAuthCode
    return new Promise(function (resolve, reject) {
      console.log('requestAuthCode mobile');
      dd.runtime.permission.requestAuthCode({
        corpId: corpId,
        onSuccess: function (result) {
          console.log('requestAuthCode', result.code);
          resolve(result.code);
        },
        onFail: function (err) {
          reject(err);
        }
      });
    });
  }

  // 获取微应用反馈式操作的临时授权码
  requestAppAuthCode(corpId, agentId) {
    return new Promise(function (resolve, reject) {
      dd.runtime.permission.requestOperateAuthCode({
        corpId: 'dingbbef8a86ef55e21735c2f4657eb6378f',
        agentId: '115717914',
        onSuccess: function (result) {
          resolve(result.code);
        },
        onFail: function (err) {
          reject(err);
        }
      });
    });
  }
  //钉钉TITLE设置
  setTitle(title) {
    dd.biz.navigation.setTitle({
      title: title, //控制标题文本，空字符串表示显示默认文本
      onSuccess: function (result) {

      },
      onFail: function (err) {

      }
    });
  }
  // 地理定位
  geolocation() {
    return new Promise((resolve, reject) => {
      dd.device.geolocation.get({
        targetAccuracy: 200,
        coordinate: Number,
        withReGeocode: false,
        useCache: true, //默认是true，如果需要频繁获取地理位置，请设置false
        onSuccess: function (result) {
          resolve(result);
          /* 高德坐标 result 结构
          {
              longitude : Number,
              latitude : Number,
              accuracy : Number,
              address : String,
              province : String,
              city : String,
              district : String,
              road : String,
              netType : String,
              operatorType : String,
              errorMessage : String,
              errorCode : Number,
              isWifiEnabled : Boolean,
              isGpsEnabled : Boolean,
              isFromMock : Boolean,
              provider : wifi|lbs|gps,
              accuracy : Number,
              isMobileEnabled : Boolean
          }
          */
        },
        onFail: function (err) {}
      });
    })
  }

  //钉钉错误信息设置
  error() {
    return new Promise(function (resolve) {
      dd.error(function (error) {
        resolve(error);
      });
    });
  }

  //钉钉confirm项目提示框
  confirm(msgtext) {
    return new Promise(function (resolve) {
      dd.device.notification.confirm({
        message: msgtext,
        title: "是否删除此选项",
        buttonLabels: ['确认', '取消'],
        onSuccess: function (result) {
          resolve(result.buttonIndex)
        },
        onFail: function (err) {}
      });
    })
  }

  //钉钉提示信息
  toast(msg) {
     dd.device.notification.toast({
        icon: '', //icon样式，有success和error，默认为空 0.0.2
        text: msg, //提示信息
        onSuccess : function(result) {
            /*{}*/
        },
        onFail : function(err) {}
    })
  }

  //启用下拉刷新
  enableRefresh() {
    return new Promise((resolve, reject) => {
      dd.ui.pullToRefresh.enable({
        onSuccess: function (result) {
          resolve(result);
        },
        onFail: function (err) {
          reject(err);
        }
      })
    })
  }

  //禁用刷新
  disabRefresh() {
    dd.ui.pullToRefresh.disable({
      onSuccess: function () {},
      onFail: function () {}
    })
  }

  //单个按钮设置
  navigationSetRight(name, show = true, control = true) {
    return new Promise((resolve, reject) => {
      dd.biz.navigation.setRight({
        show: show, //控制按钮显示， true 显示， false 隐藏， 默认true
        control: control, //是否控制点击事件，true 控制，false 不控制， 默认false
        text: name, //控制显示文本，空字符串表示显示默认文本
        onSuccess: function (result) {
          resolve(result);
        },
        onFail: function (err) {
          reject(err);
        }
      });
    })
  }

  //钉钉左测按钮控制
  navigationsetLeft() {
    return new Promise((resolve, reject) => {
      dd.biz.navigation.setLeft({
        show: true, //控制按钮显示， true 显示， false 隐藏， 默认true
        control: false, //是否控制点击事件，true 控制，false 不控制， 默认false
        showIcon: true, //是否显示icon，true 显示， false 不显示，默认true； 注：具体UI以客户端为准
        text: '我工模压要', //控制显示文本，空字符串表示显示默认文本
        onSuccess: function () {
          alert(result)
          /*
          {}
          */
          //如果control为true，则onSuccess将在发生按钮点击事件被回调
        },
        onFail: function (err) {}
      });
    });
  }

  //钉钉多个按钮设置
  setMenu(items, backColor = "#ffffff", textColor = "#000000") {
    return new Promise((resolve, reject) => {
      dd.biz.navigation.setMenu({
        backgroundColor: backColor,
        textColor: textColor,
        items: items,
        onSuccess: function (data) {
          resolve(data);
        },
        onFail: function (err) {}
      });

    })
  }

  //获取钉钉个人信息[头像，名称]
  getUserInfo() {
    return new Promise((resolve, reject) => {
      dd.biz.user.get({
        onSuccess: function (info) {
          resolve(info);
        },
        onFail: function (err) {
          reject(err);
        }
      });
    });
  }

  //钉钉企业,用户、部门、信息多选  
  complexPicker(userids, departs, title) {
    return new Promise((resolve, reject) => {
      dd.biz.contact.complexPicker({
        title: title, //标题
        corpId: localStorage.getItem('corpId'), //企业的corpId
        multiple: true, //是否多选
        limitTips: "", //超过限定人数返回提示
        maxUsers: 1000, //最大可选人数
        pickedUsers: userids, //已选用户
        pickedDepartments: departs, //已选部门
        disabledUsers: [], //不可选用户
        disabledDepartments: [], //不可选部门
        requiredUsers: [], //必选用户（不可取消选中状态）
        requiredDepartments: [], //必选部门（不可取消选中状态）
        appId: 158, //微应用的Id
        // permissionType: "xxx", //选人权限，目前只有GLOBAL这个参数
        responseUserOnly: false, //单纯返回人，或者返回人和部门
        onSuccess: function (result) {
          resolve(result)
        },
        onFail: function (err) {
          resolve(err)
        }
      });
    })
  }




  //钉钉组织内人员多选。
  contactChoose(userids, title) {
    return new Promise(function (resolve, reject) {
      dd.biz.contact.choose({
        startWithDepartmentId: -1, //-1表示打开的通讯录从自己所在部门开始展示, 0表示从企业最上层开始，(其他数字表示从该部门开始:暂时不支持)
        multiple: true, //是否多选： true多选 false单选； 默认true
        users: userids, //默认选中的用户列表，userid；成功回调中应包含该信息
        disabledUsers: [], // 不能选中的用户列表，员工userid
        corpId: localStorage.getItem('corpId'), //企业id
        max: 1500, //人数限制，当multiple为true才生效，可选范围1-1500
        limitTips: "你好，已经超出人数限制", //超过人数限制的提示语可以用这个字段自定义
        isNeedSearch: true, // 是否需要搜索功能
        title: title, // 如果你需要修改选人页面的title，可以在这里赋值 
        local: true, // 是否显示本地联系人，默认false
        onSuccess: function (data) {
          resolve(data)
        },
        onFail: function (err) {
          alert(JSON.stringify(err))
        }
      });
    })
  }

  //打开http跳转
  openLink(url) {
    dd.biz.util.openLink({
      "url": url,
      "enableShare": true
    });
  }

  uploadImages(maxNum) {
    return new Promise(function (resolve, reject) {
      dd.biz.util.uploadImage({
        multiple: true, //是否多选，默认false
        max: maxNum, //最多可选个数
        onSuccess: function (result) {
          resolve(result)

          //onSuccess将在图片上传成功之后调用
          /*
          [
            'http://gtms03.alicdn.com/tps/i3/TB1VF6uGFXXXXalaXXXmh5R_VXX-237-236.png'
          ]
          */
        },
        onFail: function (err) {
          reject("取消上传图片");
        }
      })
    })

  }
  uploadImageFromCamera() {
    return new Promise(function (resolve, reject) {
      dd.biz.util.uploadImageFromCamera({
        compression: true, //(是否压缩，默认为true)
        onSuccess: function (result) {
          // alert(result)
          resolve(result)
          //onSuccess将在图片上传成功之后调用
          /*
          [
            'http://gtms03.alicdn.com/tps/i3/TB1VF6uGFXXXXalaXXXmh5R_VXX-237-236.png'
          ]
          */
        },
        onFail: function (err) {}
      });
    });
  }
  choose(title, arry) {
    return new Promise(function (resolve, reject) {
      dd.device.notification.actionSheet({
        title: title, //标题
        cancelButton: '取消', //取消按钮文本
        otherButtons: arry,
        onSuccess: function (result) {
          resolve(result)
        },
        onFail: function (err) {}
      })
    })

  }

  //钉钉标题
  setTitle(title) {
    dd.biz.navigation.setTitle({
      title: title, //控制标题文本，空字符串表示显示默认文本
      onSuccess: function (result) {},
      onFail: function (err) {}
    });
  }


  //loading
  showPreloader(title) {
    dd.device.notification.showPreloader({
      text: title, //loading显示的字符，空表示不显示文字
      showIcon: true, //是否显示icon，默认true
      onSuccess: function (result) {
        /*{}*/
      },
      onFail: function (err) {}
    })
  }

  //阴藏加载
  hidePreloader() {
    dd.device.notification.hidePreloader({
      onSuccess: function (result) {},
      onFail: function (err) {}
    })
  }

  complexChoose(users, depts) {
    return new Promise((resolve, reject) => {
      dd.biz.contact.complexChoose({
        startWithDepartmentId: 0, //-1表示从自己所在部门开始, 0表示从企业最上层开始，其他数字表示从该部门开始
        selectedUsers: users, //预选用户
        disabledUsers: [], // 不能选中的用户列表，员工userid
        selectedDepartments: depts, // 预选中的部门列表，部门id
        disabledDepartments: [], // 不能选中的部门列表，部门id
        // max: Number, //人数限制，当multiple为true才生效，可选范围1-1500
        // limitTips: "xxx", //超过人数限制的提示语可以用这个字段自定义
        local: "true", // 是否显示本地联系人，默认false
        isNeedSearch: true, // 是否需要搜索功能
        corpId: this.corpId, //企业id
        onSuccess: function (data) {
          resolve(data);
        },
        onFail: function (err) {
          reject(err)
        }
      });
    })
  }

  departmentsPicker() {
    return new Promise((resolve, reject) => {
      dd.biz.contact.departmentsPicker({
        title: "测试标题",
                    //标题
        corpId: this.corpId,
        multiple: false,
                    //是否多选
        limitTips: "超出了",
                  //超过限定人数返回提示
        maxDepartments: 100,
                    //最大选择部门数量
        pickedDepartments: [],
                  //已选部门
        disabledDepartments: [],
                //不可选部门
        requiredDepartments: [],
                //必选部门（不可取消选中状态）
        appId: 111129513,
                 //微应用的Id
        permissionType: "xxx",
                  //选人权限，目前只有GLOBAL这个参数
        onSuccess: function (result) {
          resolve(result.departments)
          /**
          {
              userCount:1,                              //选择人数
              departmentsCount:1，//选择的部门数量
              departments:[{"id":,"name":"","number":}]//返回已选部门列表，列表中每个对象包含id（部门id）、name（部门名称）、number（部门人数）
          }
          */
        },
        onFail: function (err) {
          alert(JSON.stringify(err))
        }
      });
    });
  }
  //日期
  prompt(value, ) {
    return new Promise(function (resolve) {
      dd.device.notification.prompt({
        message: '请输入仪器编码',
        title: '提示',
        defaultText: '',
        buttonLabels: ['确认', '取消'],
        onSuccess: function (result) {
          resolve(result.value)
          //onSuccess将在点击button之后回调
          /*
          {
              buttonIndex: 0, //被点击按钮的索引值，Number类型，从0开始
              value: '' //输入的值
          }
          */
        },
        onFail: function (err) {}
      });
    })
  }
  setLeft() {
    let this_ = this;
    return new Promise(function (resolve) {
      dd.biz.navigation.setLeft({
        control: true, //是否控制点击事件，true 控制，false 不控制， 默认false
        text: '返回1', //控制显示文本，空字符串表示显示默认文本
        onSuccess: function (result) {
          this_.$router.push({
            path: 'Overtime'
          });
          /*
          {}
          */
          //如果control为true，则onSuccess将在发生按钮点击事件被回调
        },
        onFail: function (err) {}
      });
    })
  }
  datetimepicker(value) {
    return new Promise((resolve, reject) => {
      dd.biz.util.datetimepicker({
        format: "yyyy-MM-dd HH:mm",
        value: '', //默认显示
        onSuccess: function (data) {
          resolve(data.value)
        },
        onFail: function (err) {
          reject.error(err);
        }
      });
    });
  }
  datepicker(value) {
    return new Promise((resolve, reject) => {
      dd.biz.util.datepicker({
        format: 'yyyy-MM-dd',
        value: '', //默认显示日期
        onSuccess : function(result) {
          resolve(data.value)
        },
        onFail : function(err) {
          reject.error(err);
        }
      })
    });
  }

  //下拉底部控件
  scrollLoad() {
    return new Promise(function (resolve) {
      document.getElementById("CloudBody").onscroll = function () {
        if (this.scrollTop < 2) {
          resolve(0)
        }
        if (this.scrollTop > 2) {
          dd.ui.pullToRefresh.disable()
        }
        if (this.scrollHeight - this.scrollTop - this.offsetHeight < 2) {
          resolve(1)
        }
      }
    })
  }

  //允许屏幕旋转
  rotateView(){
    return new Promise((resolve,reject)=>{
      dd.device.screen.rotateView({
        showStatusBar : true, // 否显示statusbar
        clockwise : true, // 是否顺时针方向
        onSuccess : function(result) {
          resolve(result);
        },
        onFail : function(err) {
          reject(err);
        }
      });
    })
  }
}

let ddapi = new Ddapi();
export default ddapi;
